﻿/*
 * 滑动槽类的实现
 */

#ifndef DOUBLE_SLIDER_H
#define DOUBLE_SLIDER_H


#include <QWidget>
#include <QFrame>

class DoubleSlider : public QWidget{
    Q_OBJECT
public:
    explicit DoubleSlider(QWidget *parent = nullptr);
    ~DoubleSlider() override = default;
    void setRange(double minValue,double maxValue);
    void setMinValue(double minValue);
    void setMaxValue(double maxValue);
    void setValue(double value);
    void setStep(double step);
public slots:
    void updateProgress();

    void resizeEvent(QResizeEvent *event) override;

    void mousePressEvent(QMouseEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
    void mouseReleaseEvent(QMouseEvent* event) override;
    void wheelEvent(QWheelEvent *event) override;
    void enterEvent(QEvent *event) override;
    void leaveEvent(QEvent *event) override;
public:
    signals:
    // 这里将整个信号设置为public就是为了方便子类对该类进行继承时候，能够对该信号进行槽函数绑定。
    void valueChanged(double value);
private:

    //滑动槽
    QFrame* m_slider;               // 滑动槽（背景的一条灰线）
    QFrame* m_handle;               // 拖动的圆球
    QFrame* m_progress;             // 用于表示已拖动的滑动槽（蓝色的那条线）

    double m_minValue = 0;
    double m_maxValue = 100;
    double m_value = 0;
    double m_step = 1;              // 单位（表示滚轮对handler增长的单位步长）

    bool m_mousePressed = false;    // 记录当前鼠标是否点击滑块的状态
    bool m_mouseInHandle = false;   // 鼠标是否还在点击滑块的范围中
    QPoint m_mousePoint;            // 用于记录鼠标坐标位置
};


#endif //DOUBLE_SLIDER_H
